| @@ -9,8 +9,7 @@ | ||
| 9 | 9 | <!-- build:css(.) styles/vendor.css --> | 
| 10 | 10 | <!-- bower:css --> | 
| 11 | 11 | <link rel="stylesheet" href="bower_components/bootstrap/dist/css/bootstrap.css" /> | 
| 12 | - | |
| 13 | - <link rel="stylesheet" href="bower_components/ladda/dist/ladda-themeless.min.css"> | |
| 12 | + <link rel="stylesheet" href="bower_components/ladda/dist/ladda.min.css" /> | |
| 14 | 13 | <!-- endbower --> | 
| 15 | 14 | <!-- endbuild --> | 
| 16 | 15 | <!-- build:css(.tmp) styles/main.css --> | 
| @@ -43,7 +42,8 @@ | ||
| 43 | 42 | <ul class="nav navbar-nav" > | 
| 44 | 43 |                <li ng-class="{ active: isActive('/')}"><a href="#/">Home</a></li> | 
| 45 | 44 |                <li ng-class="{ active: isActive('/domains')}"><a href="#/domains">domains</a></li> | 
| 46 | -              <li ng-class="{ active: isActive('/sign_in')}"><a href="#/sign_in">Sign in</a></li> | |
| 45 | +              <li ng-class="{ active: isActive('/sign_in')}" ng-show="!isAuthenticated"><a href="#/sign_in">Sign in</a></li> | |
| 46 | +              <li ng-class="{ active: isActive('/addPost')}" ng-show="isAuthenticated"><a href="#/addPost">Add Post</a></li> | |
| 47 | 47 | </ul> | 
| 48 | 48 | </div> | 
| 49 | 49 | </div> | 
| @@ -57,7 +57,7 @@ | ||
| 57 | 57 | <div footer></div> | 
| 58 | 58 |  | 
| 59 | 59 |  | 
| 60 | - <!-- Google Analytics: change UA-XXXXX-X to be your site's ID --> | |
| 60 | + <!-- Google Analytics: change UA-XXXXX-X to be your site's ID | |
| 61 | 61 | <script> | 
| 62 | 62 |         !function(A,n,g,u,l,a,r){A.GoogleAnalyticsObject=l,A[l]=A[l]||function(){ | 
| 63 | 63 | (A[l].q=A[l].q||[]).push(arguments)},A[l].l=+new Date,a=n.createElement(g), | 
| @@ -67,6 +67,7 @@ | ||
| 67 | 67 |         ga('create', 'UA-XXXXX-X'); | 
| 68 | 68 |         ga('send', 'pageview'); | 
| 69 | 69 | </script> | 
| 70 | + --> | |
| 70 | 71 |  | 
| 71 | 72 | <!-- build:js(.) scripts/vendor.js --> | 
| 72 | 73 | <!-- bower:js --> | 
| @@ -79,6 +80,7 @@ | ||
| 79 | 80 | <script src="bower_components/angular-route/angular-route.js"></script> | 
| 80 | 81 | <script src="bower_components/angular-sanitize/angular-sanitize.js"></script> | 
| 81 | 82 | <script src="bower_components/angular-touch/angular-touch.js"></script> | 
| 83 | + <script src="bower_components/angular-bootstrap/ui-bootstrap-tpls.js"></script> | |
| 82 | 84 | <script src="bower_components/firebase/firebase.js"></script> | 
| 83 | 85 | <script src="bower_components/angularfire/dist/angularfire.js"></script> | 
| 84 | 86 | <script src="bower_components/spin.js/spin.js"></script> | 
| @@ -89,11 +91,14 @@ | ||
| 89 | 91 |  | 
| 90 | 92 |          <!-- build:js({.tmp,app}) scripts/scripts.js --> | 
| 91 | 93 | <script src="scripts/app.js"></script> | 
| 94 | + <script src="scripts/services/userData.js"></script> | |
| 92 | 95 | <script src="scripts/controllers/main.js"></script> | 
| 93 | 96 | <script src="scripts/controllers/domainsList.js"></script> | 
| 94 | 97 | <script src="scripts/controllers/signin.js"></script> | 
| 98 | + <script src="scripts/controllers/addPost.js"></script> | |
| 95 | 99 | <script src="scripts/controllers/header.js"></script> | 
| 96 | 100 | <script src="scripts/directives/footer.js"></script> | 
| 101 | + | |
| 97 | 102 | <!-- endbuild --> | 
| 98 | 103 | <scriptsrc="https://cdn.firebase.com/js/simple-login/1.6.2/firebase-simple-login.js"></script> | 
| 99 | 104 | </body> | 
| @@ -18,9 +18,11 @@ angular | ||
| 18 | 18 | 'ngTouch', | 
| 19 | 19 | 'firebase', | 
| 20 | 20 | 'angular-ladda', | 
| 21 | + 'domainManagerApp.header', | |
| 21 | 22 | 'domainManagerApp.main', | 
| 22 | 23 | 'domainManagerApp.signin', | 
| 23 | - 'domainManagerApp.domains' | |
| 24 | + 'domainManagerApp.domains', | |
| 25 | + 'domainManagerApp.addPost' | |
| 24 | 26 | ]) | 
| 25 | 27 |    .config(['$routeProvider', function($routeProvider) { | 
| 26 | 28 | $routeProvider | 
| @@ -36,6 +38,10 @@ angular | ||
| 36 | 38 | templateUrl: 'views/signin.html', | 
| 37 | 39 | controller: 'SignInController' | 
| 38 | 40 | }) | 
| 41 | +      .when('/addPost', { | |
| 42 | + templateUrl: 'views/addPost.html', | |
| 43 | + controller: 'AddPostController' | |
| 44 | + }) | |
| 39 | 45 |        .otherwise({ | 
| 40 | 46 | redirectTo: '/' | 
| 41 | 47 | }); | 
| @@ -0,0 +1,13 @@ | ||
| 1 | +'use strict'; | |
| 2 | + | |
| 3 | +/** | |
| 4 | + * @ngdoc function | |
| 5 | + * @name domainManagerApp.controller:MainCtrl | |
| 6 | + * @description | |
| 7 | + * # MainCtrl | |
| 8 | + * Controller of the domainManagerApp | |
| 9 | + */ | |
| 10 | + angular.module('domainManagerApp.addPost', ['firebase', 'domainManagerApp.userData']) | |
| 11 | +  .controller('AddPostController', ['$scope', 'UserData', function ($scope, UserData) { | |
| 12 | + | |
| 13 | + }]); | 
| @@ -7,12 +7,29 @@ | ||
| 7 | 7 | * # AboutCtrl | 
| 8 | 8 | * Controller of the domainManagerApp | 
| 9 | 9 | */ | 
| 10 | -angular.module('domainManagerApp.domains', []) | |
| 10 | +angular.module('domainManagerApp.domains', ['ui.bootstrap']) | |
| 11 | 11 |    .controller('DomainsListController', function ($scope, $http) { | 
| 12 | 12 |      $http({ | 
| 13 | 13 | method: 'GET', | 
| 14 | 14 | url: '/scripts/data.json' | 
| 15 | 15 |      }).success(function(data) { | 
| 16 | 16 | $scope.domains = data.domains; | 
| 17 | - }) | |
| 17 | + | |
| 18 | + | |
| 19 | + }); | |
| 20 | + | |
| 21 | + $scope.oneAtATime = false; | |
| 22 | + $scope.isOpen = false; | |
| 23 | + | |
| 24 | +    $scope.labelColor = function(status) { | |
| 25 | +      if (status == "OK"){ | |
| 26 | + var color = "label-success"; | |
| 27 | +      } else if (status == "DEAD") { | |
| 28 | + var color = "label-danger"; | |
| 29 | +      } else { | |
| 30 | + var color = "label-default"; | |
| 31 | + } | |
| 32 | + return color; | |
| 33 | + } | |
| 34 | + | |
| 18 | 35 | }); | 
| @@ -7,9 +7,18 @@ | ||
| 7 | 7 | * # MainCtrl | 
| 8 | 8 | * Controller of the domainManagerApp | 
| 9 | 9 | */ | 
| 10 | -angular.module('domainManagerApp') | |
| 11 | -  .controller('HeaderController', function ($scope, $location) { | |
| 10 | +angular.module('domainManagerApp.header', ['domainManagerApp.userData']) | |
| 11 | +  .controller('HeaderController', ['$scope', '$rootScope', '$location', 'UserData', function ($scope, $rootScope, $location, UserData) { | |
| 12 | 12 |      $scope.isActive = function (viewLocation) { | 
| 13 | 13 | return viewLocation === $location.path(); | 
| 14 | 14 | }; | 
| 15 | - }); | |
| 15 | + $scope.isAuthenticated = UserData.isAuthenticated(); | |
| 16 | + console.log($scope.isAuthenticated) | |
| 17 | + | |
| 18 | +    $rootScope.$on('user:isAuthenticated', function(data, isAuthenticated) { | |
| 19 | + // you could inspect the data to see if what you care about changed, or just update your own scope | |
| 20 | + $scope.isAuthenticated = isAuthenticated; | |
| 21 | + console.log($scope.isAuthenticated) | |
| 22 | + }); | |
| 23 | + | |
| 24 | + }]); | 
| @@ -7,11 +7,8 @@ | ||
| 7 | 7 | * # MainCtrl | 
| 8 | 8 | * Controller of the domainManagerApp | 
| 9 | 9 | */ | 
| 10 | - angular.module('domainManagerApp.main', ['firebase']) | |
| 11 | -  .controller('MainCtrl', function ($scope) { | |
| 12 | - $scope.awesomeThings = [ | |
| 13 | - 'HTML5 Boilerplate', | |
| 14 | - 'AngularJS', | |
| 15 | - 'Karma' | |
| 16 | - ]; | |
| 17 | - }); | |
| 10 | + angular.module('domainManagerApp.main', ['firebase', 'domainManagerApp.userData']) | |
| 11 | +  .controller('MainCtrl', ['$scope', 'UserData', function ($scope, UserData) { | |
| 12 | + $scope.username = UserData.getUser(); | |
| 13 | + $scope.isAuthenticated = UserData.isAuthenticated(); | |
| 14 | + }]); | 
| @@ -7,8 +7,8 @@ | ||
| 7 | 7 | * # MainCtrl | 
| 8 | 8 | * Controller of the domainManagerApp | 
| 9 | 9 | */ | 
| 10 | - angular.module('domainManagerApp.signin', ['firebase', 'angular-ladda']) | |
| 11 | - .controller('SignInController', ['$scope', '$firebaseAuth', '$timeout', function ($scope, $firebaseAuth, $timeout) { | |
| 10 | + angular.module('domainManagerApp.signin', ['firebase', 'domainManagerApp.userData', 'angular-ladda']) | |
| 11 | + .controller('SignInController', ['$scope', 'UserData', '$location', '$firebaseAuth', '$timeout', function ($scope, UserData, $location, $firebaseAuth, $timeout) { | |
| 12 | 12 |  | 
| 13 | 13 | $scope.loading = false; | 
| 14 | 14 |      var firebaseObj = new Firebase("https://j1x-cpanel.firebaseio.com"); | 
| @@ -28,6 +28,8 @@ | ||
| 28 | 28 |          console.log("Logged in as:", authData.uid); | 
| 29 | 29 |          $timeout(function() { | 
| 30 | 30 | $scope.loading = false; // stop loading | 
| 31 | + UserData.set($scope.user.email, true); | |
| 32 | +          $location.path('/main'); | |
| 31 | 33 | }, 1000); | 
| 32 | 34 |        }).catch(function(error) { | 
| 33 | 35 |          console.error("Authentication failed:", error); | 
| @@ -37,4 +39,20 @@ | ||
| 37 | 39 | }); | 
| 38 | 40 | } | 
| 39 | 41 |  | 
| 42 | +    $scope.EmailCheck = function() { | |
| 43 | +      if($scope.signinForm.email.$invalid && $scope.signinForm.email.$dirty) { | |
| 44 | + return true; | |
| 45 | +      } else { | |
| 46 | + return false; | |
| 47 | + } | |
| 48 | + } | |
| 49 | + | |
| 50 | +    $scope.PasswordCheck = function() { | |
| 51 | +      if($scope.signinForm.password.$error.minlength && $scope.signinForm.password.$dirty) { | |
| 52 | + return true; | |
| 53 | +      } else { | |
| 54 | + return false; | |
| 55 | + } | |
| 56 | + } | |
| 57 | + | |
| 40 | 58 | }]); | 
| @@ -4,33 +4,46 @@ | ||
| 4 | 4 | "name" : "jamesperet.com", | 
| 5 | 5 | "status" : "OK", | 
| 6 | 6 | "owner" : "James Peret", | 
| 7 | - "registrart" : "NT10", | |
| 8 | - "registration_date" : "", | |
| 9 | - "expiration_date" : "" | |
| 7 | + "registrar" : "NT10", | |
| 8 | + "registration_date" : "01/01/2001", | |
| 9 | + "expiration_date" : "01/01/20016", | |
| 10 | + "description" : "My personal global domain. Used for my portfolio and blog in english" | |
| 10 | 11 | }, | 
| 11 | 12 |       { | 
| 12 | 13 | "name" : "jamesperet.com.br", | 
| 13 | 14 | "status" : "OK", | 
| 14 | 15 | "owner" : "James Peret", | 
| 15 | - "registrart" : "NT10", | |
| 16 | - "registration_date" : "", | |
| 17 | - "expiration_date" : "" | |
| 16 | + "registrar" : "NT10", | |
| 17 | + "registration_date" : "01/01/2001", | |
| 18 | + "expiration_date" : "01/01/2016", | |
| 19 | + "description" : "My personal brasilian domain. Used for my portfolio and blog in portuguese" | |
| 18 | 20 | }, | 
| 19 | 21 |       { | 
| 20 | 22 | "name" : "higheffects.com", | 
| 21 | 23 | "status" : "OK", | 
| 22 | 24 | "owner" : "James Peret", | 
| 23 | - "registrart" : "NT10", | |
| 24 | - "registration_date" : "", | |
| 25 | - "expiration_date" : "" | |
| 25 | + "registrar" : "NT10", | |
| 26 | + "registration_date" : "01/01/2004", | |
| 27 | + "expiration_date" : "01/01/2016", | |
| 28 | + "description" : "Company global domain." | |
| 26 | 29 | }, | 
| 27 | 30 |       { | 
| 28 | 31 | "name" : "higheffects.com.br", | 
| 29 | 32 | "status" : "OK", | 
| 30 | 33 | "owner" : "James Peret", | 
| 31 | - "registrart" : "NT10", | |
| 32 | - "registration_date" : "", | |
| 33 | - "expiration_date" : "" | |
| 34 | + "registrar" : "NT10", | |
| 35 | + "registration_date" : "01/01/2004", | |
| 36 | + "expiration_date" : "01/01/2016", | |
| 37 | + "description" : "Company brasilian domain." | |
| 38 | + }, | |
| 39 | +     { | |
| 40 | + "name" : "vertentes.tv", | |
| 41 | + "status" : "DEAD", | |
| 42 | + "owner" : "James Peret", | |
| 43 | + "registrar" : "NT10", | |
| 44 | + "registration_date" : "01/01/2005", | |
| 45 | + "expiration_date" : "01/01/2012", | |
| 46 | + "description" : "Project domain. Not in use anymore." | |
| 34 | 47 | } | 
| 35 | 48 | ] | 
| 36 | 49 | } | 
| @@ -1,3 +1,5 @@ | ||
| 1 | +"use strict" | |
| 2 | + | |
| 1 | 3 |  angular.module('domainManagerApp') | 
| 2 | 4 |    .directive('footer', function () { | 
| 3 | 5 |        return { | 
| @@ -0,0 +1,22 @@ | ||
| 1 | +"use strict" | |
| 2 | + | |
| 3 | +angular.module('domainManagerApp.userData', []) | |
| 4 | +.service('UserData', [ '$rootScope', function($rootScope) { | |
| 5 | + var user = ''; | |
| 6 | + var isAuthenticated = ""; | |
| 7 | + | |
| 8 | +  this.set = function(value1, value2) { | |
| 9 | + user = value1; | |
| 10 | + isAuthenticated = value2; | |
| 11 | +    $rootScope.$broadcast('user:isAuthenticated', isAuthenticated); | |
| 12 | + } | |
| 13 | + | |
| 14 | +  this.isAuthenticated = function() { | |
| 15 | + return isAuthenticated; | |
| 16 | + } | |
| 17 | + | |
| 18 | +  this.getUser = function() { | |
| 19 | + return user; | |
| 20 | + } | |
| 21 | + | |
| 22 | +}]); | 
| @@ -87,6 +87,10 @@ body.ng-scope {padding: 0px;} | ||
| 87 | 87 | } | 
| 88 | 88 | } | 
| 89 | 89 |  | 
| 90 | +/* Bootstrap-UI Overrides */ | |
| 91 | + | |
| 92 | +.nav, .pagination, .carousel, .panel-title a { cursor: pointer; } | |
| 93 | + | |
| 90 | 94 | /* Bootstrap Signup Styles */ | 
| 91 | 95 |  | 
| 92 | 96 |  .form-signin { | 
| @@ -137,3 +141,17 @@ h1.j1x-logo { | ||
| 137 | 141 | margin-bottom: 20px; | 
| 138 | 142 | margin-top: 0px; | 
| 139 | 143 | } | 
| 144 | + | |
| 145 | +a.accordion-toggle:focus { | |
| 146 | + outline: none; | |
| 147 | + outline: none; | |
| 148 | + outline-offset: 0px; | |
| 149 | +} | |
| 150 | + | |
| 151 | +/* Hacks */ | |
| 152 | +.dl-horizontal.domains dt { | |
| 153 | + width: 105px; | |
| 154 | +} | |
| 155 | +.dl-horizontal.domains dd { | |
| 156 | + margin-left: 130px; | |
| 157 | +} | 
| @@ -0,0 +1,36 @@ | ||
| 1 | +<div class="container"> | |
| 2 | + | |
| 3 | + <form class="form-horizontal"> | |
| 4 | + <fieldset> | |
| 5 | + | |
| 6 | + <!-- Form Name --> | |
| 7 | + <legend>Create Post</legend> | |
| 8 | + | |
| 9 | + <!-- Text input--> | |
| 10 | + <div class="form-group"> | |
| 11 | + <label class="col-md-4 control-label" for="txtTitle">Title</label> | |
| 12 | + <div class="col-md-4"> | |
| 13 | + <input id="txtTitle" name="txtTitle" type="text" placeholder="placeholder" class="form-control input-md"> | |
| 14 | + | |
| 15 | + </div> | |
| 16 | + </div> | |
| 17 | + | |
| 18 | + <!-- Textarea --> | |
| 19 | + <div class="form-group"> | |
| 20 | + <label class="col-md-4 control-label"for="txtPost">Post</label> | |
| 21 | + <div class="col-md-4"> | |
| 22 | + <text areaclass="form-control" id="txtPost" name="txtPost"></textarea> | |
| 23 | + </div> | |
| 24 | + </div> | |
| 25 | + | |
| 26 | + <!-- Button --> | |
| 27 | + <div class="form-group"> | |
| 28 | + <label class="col-md-4 control-label"for="singlebutton"></label> | |
| 29 | + <div class="col-md-4"> | |
| 30 | + <input id="singlebutton"name="singlebutton"class="btn btn-primary"type="submit"value="Publish"/> | |
| 31 | + </div> | |
| 32 | + </div> | |
| 33 | + | |
| 34 | + </fieldset> | |
| 35 | + </form> | |
| 36 | +</div> | 
| @@ -1,3 +1,21 @@ | ||
| 1 | -<ul> | |
| 2 | -  <li ng-repeat="domain in domains">{{domain.name}}</li> | |
| 3 | -</ul> | |
| 1 | +<accordion close-others="oneAtATime"> | |
| 2 | + <accordion-group ng-repeat="domain in domains" is-open="isOpen"> | |
| 3 | + <accordion-heading ng-click="isOpen = !isOpen"> | |
| 4 | +        <i class="pull-left glyphicon"  ng-class="{'glyphicon-chevron-down': isOpen, 'glyphicon-chevron-right': !isOpen}" style="margin-right: 10px;"></i> | |
| 5 | +        {{domain.name}} | |
| 6 | +        <span class="{{labelColor(domain.status)}} label pull-right">{{domain.status}}</span> | |
| 7 | + </accordion-heading> | |
| 8 | + <dl class="dl-horizontal domains"> | |
| 9 | + <dt>Description</dt> | |
| 10 | +        <dd>{{domain.description}}</dd> | |
| 11 | + <dt>Owner</dt> | |
| 12 | +        <dd>{{domain.owner}}</dd> | |
| 13 | + <dt>Registrar</dt> | |
| 14 | +        <dd>{{domain.registrar}}</dd> | |
| 15 | + <dt>Registration</dt> | |
| 16 | +        <dd>{{domain.registration_date}}</dd> | |
| 17 | + <dt>Expiration</dt> | |
| 18 | +        <dd>{{domain.expiration_date}}</dd> | |
| 19 | + </dl> | |
| 20 | + </accordion-group> | |
| 21 | +</accordion> | 
| @@ -4,5 +4,8 @@ | ||
| 4 | 4 | <h2>Domain Manager</h2> | 
| 5 | 5 | </div> | 
| 6 | 6 |  | 
| 7 | +    Welcome {{username}}<br> | |
| 8 | +    {{isAuthenticated}} | |
| 9 | + | |
| 7 | 10 |  | 
| 8 | 11 | </div> | 
| @@ -3,11 +3,17 @@ | ||
| 3 | 3 | <h1 class="j1x-logo">J1X</h1> | 
| 4 | 4 |  | 
| 5 | 5 | </div> | 
| 6 | - <form class="form-signin" role="form"> | |
| 6 | + <form class="form-signin" name="signinForm" role="form"> | |
| 7 | 7 | <h2 class="form-title">Login</h2> | 
| 8 | - <input ng-model="user.email" type="email" class="form-control" placeholder="Email address" required="" autofocus=""> | |
| 9 | - <input ng-model="user.password" type="password" class="form-control" placeholder="Password" required=""> | |
| 10 | -        <button ng-click="SignIn($event)" ng-disabled="!user.email || !user.password || loading" class="btn btn-lg btn-primary btn-block ladda-button"  ladda="{{loading}}" data-style="slide-up"> SignIn</button> | |
| 8 | +        <div class="form-group" ng-class="{ 'has-error' : EmailCheck() }"> | |
| 9 | + <input name="email" ng-model="user.email" type="email" class="form-control" placeholder="Email address" required="" autofocus=""> | |
| 10 | + <p class="help-block" ng-show="EmailCheck()">Enter a valid email.</p> | |
| 11 | + </div> | |
| 12 | +        <div class="form-group" ng-class="{ 'has-error' : PasswordCheck() }"> | |
| 13 | + <input name="password" ng-model="user.password" type="password" class="form-control" placeholder="Password" required="" ng-minlength="8"> | |
| 14 | + <p class="help-block" ng-show="PasswordCheck()">Min password length is 8 characters.</p> | |
| 15 | + </div> | |
| 16 | +        <button ng-click="SignIn($event)" ng-disabled="!user.email || !user.password || loading" class="btn btn-lg btn-primary btn-block ladda-button"  ladda="{{loading}}" data-style="slide-up">SignIn</button> | |
| 11 | 17 | </form> | 
| 12 | 18 |  | 
| 13 | 19 | </div> | 
| @@ -10,6 +10,7 @@ | ||
| 10 | 10 | "angular-route": "^1.3.0", | 
| 11 | 11 | "angular-sanitize": "^1.3.0", | 
| 12 | 12 | "angular-touch": "^1.3.0", | 
| 13 | + "angular-bootstrap": "^0.13.0", | |
| 13 | 14 | "angularfire": "~1.1.1", | 
| 14 | 15 | "angular-ladda": "~0.2.2" | 
| 15 | 16 | }, | 
| @@ -14,7 +14,7 @@ | ||
| 14 | 14 | "grunt-contrib-cssmin": "^0.12.0", | 
| 15 | 15 | "grunt-contrib-htmlmin": "^0.4.0", | 
| 16 | 16 | "grunt-contrib-imagemin": "^0.9.2", | 
| 17 | - "grunt-contrib-jshint": "^0.11.0", | |
| 17 | + "grunt-contrib-jshint": "^0.11.2", | |
| 18 | 18 | "grunt-contrib-uglify": "^0.7.0", | 
| 19 | 19 | "grunt-contrib-watch": "^0.6.1", | 
| 20 | 20 | "grunt-filerev": "^2.1.2", | 
| @@ -31,6 +31,7 @@ module.exports = function(config) { | ||
| 31 | 31 | 'bower_components/angular-route/angular-route.js', | 
| 32 | 32 | 'bower_components/angular-sanitize/angular-sanitize.js', | 
| 33 | 33 | 'bower_components/angular-touch/angular-touch.js', | 
| 34 | + 'bower_components/angular-bootstrap/ui-bootstrap-tpls.js', | |
| 34 | 35 | 'bower_components/firebase/firebase.js', | 
| 35 | 36 | 'bower_components/angularfire/dist/angularfire.js', | 
| 36 | 37 | 'bower_components/spin.js/spin.js', |